#!/usr/bin/env python3

import argparse
import os
import sys

import yaml
from mako.template import Template


def generate_cpp(sensor_yaml, output_dir):
    with open(sensor_yaml, "r") as f:
        ifile = yaml.safe_load(f)
        if not isinstance(ifile, dict):
            ifile = {}

        # Render the mako template

        t = Template(
            filename=os.path.join(script_dir, "inventorysensor.cpp.mako")
        )

        output_cpp = os.path.join(output_dir, "inventory-sensor-gen.cpp")
        with open(output_cpp, "w") as fd:
            fd.write(t.render(sensorDict=ifile))


def main():
    valid_commands = {"generate-cpp": generate_cpp}
    parser = argparse.ArgumentParser(
        description="Inventory Object to IPMI SensorID code generator"
    )

    parser.add_argument(
        "-i",
        "--sensor_yaml",
        dest="sensor_yaml",
        default="example.yaml",
        help="input sensor yaml file to parse",
    )

    parser.add_argument(
        "-o",
        "--output-dir",
        dest="outputdir",
        default=".",
        help="output directory",
    )

    parser.add_argument(
        "command",
        metavar="COMMAND",
        type=str,
        choices=valid_commands.keys(),
        help="Command to run.",
    )

    args = parser.parse_args()

    if not (os.path.isfile(args.sensor_yaml)):
        sys.exit("Can not find input yaml file " + args.sensor_yaml)

    function = valid_commands[args.command]
    function(args.sensor_yaml, args.outputdir)


if __name__ == "__main__":
    script_dir = os.path.dirname(os.path.realpath(__file__))
    main()
